{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# imports \n",
    "import math\n",
    "import os\n",
    "import json\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def matrixToEuler(matrix):\n",
    "    if not matrix:\n",
    "        return []\n",
    "    sy = math.sqrt(matrix[0][0] * matrix[0][0] + matrix[1][0] * matrix[1][0])\n",
    "    singular = sy < 1e-6\n",
    "    if not singular:\n",
    "        x = math.atan2(matrix[2][1], matrix[2][2])\n",
    "        y = math.atan2(-matrix[2][0], sy)\n",
    "        z = math.atan2(matrix[1][0], matrix[0][0])\n",
    "    else:\n",
    "        x = math.atan2(-matrix[1][2], matrix[1][1])\n",
    "        y = math.atan2(-matrix[2][0], sy)\n",
    "        z = 0\n",
    "    return x, y, z\n",
    "\n",
    "\n",
    "def intrinsicData(matrix):\n",
    "    return matrix[0][0], matrix[0][2], matrix[1][1], matrix[1][2]\n",
    "\n",
    "\n",
    "class PoeData:\n",
    "    def __init__(self, boardName):\n",
    "        self.name = boardName\n",
    "\n",
    "        # sort all camera data into designated dictionaries\n",
    "        self.camera0 = dict()\n",
    "        self.camera1 = dict()\n",
    "        self.camera2 = dict()\n",
    "\n",
    "        # camera 0 specifications\n",
    "        self.camera0[\"distortionCoeff\"] = []\n",
    "        self.camera0[\"rotationMatrix\"] = dict()\n",
    "        self.camera0[\"rotationMatrix\"][\"r\"] = []\n",
    "        self.camera0[\"rotationMatrix\"][\"p\"] = []\n",
    "        self.camera0[\"rotationMatrix\"][\"y\"] = []\n",
    "        self.camera0[\"specTranslation\"] = dict()\n",
    "        self.camera0[\"specTranslation\"][\"x\"] = []\n",
    "        self.camera0[\"specTranslation\"][\"y\"] = []\n",
    "        self.camera0[\"specTranslation\"][\"z\"] = []\n",
    "        self.camera0[\"translation\"] = dict()\n",
    "        self.camera0[\"translation\"][\"x\"] = []\n",
    "        self.camera0[\"translation\"][\"y\"] = []\n",
    "        self.camera0[\"translation\"][\"z\"] = []\n",
    "        self.camera0[\"height\"] = []\n",
    "        self.camera0[\"intrinsicMatrix\"] = dict()\n",
    "        self.camera0[\"intrinsicMatrix\"][\"f_x\"] = []\n",
    "        self.camera0[\"intrinsicMatrix\"][\"f_y\"] = []\n",
    "        self.camera0[\"intrinsicMatrix\"][\"c_x\"] = []\n",
    "        self.camera0[\"intrinsicMatrix\"][\"c_y\"] = []\n",
    "        self.camera0[\"specHfovDeg\"] = []\n",
    "        self.camera0[\"width\"] = []\n",
    "\n",
    "        # camera 1 specifications\n",
    "        self.camera1[\"distortionCoeff\"] = []\n",
    "        self.camera1[\"rotationMatrix\"] = dict()\n",
    "        self.camera1[\"rotationMatrix\"][\"r\"] = []\n",
    "        self.camera1[\"rotationMatrix\"][\"p\"] = []\n",
    "        self.camera1[\"rotationMatrix\"][\"y\"] = []\n",
    "        self.camera1[\"specTranslation\"] = dict()\n",
    "        self.camera1[\"specTranslation\"][\"x\"] = []\n",
    "        self.camera1[\"specTranslation\"][\"y\"] = []\n",
    "        self.camera1[\"specTranslation\"][\"z\"] = []\n",
    "        self.camera1[\"translation\"] = dict()\n",
    "        self.camera1[\"translation\"][\"x\"] = []\n",
    "        self.camera1[\"translation\"][\"y\"] = []\n",
    "        self.camera1[\"translation\"][\"z\"] = []\n",
    "        self.camera1[\"height\"] = []\n",
    "        self.camera1[\"intrinsicMatrix\"] = dict()\n",
    "        self.camera1[\"intrinsicMatrix\"][\"f_x\"] = []\n",
    "        self.camera1[\"intrinsicMatrix\"][\"f_y\"] = []\n",
    "        self.camera1[\"intrinsicMatrix\"][\"c_x\"] = []\n",
    "        self.camera1[\"intrinsicMatrix\"][\"c_y\"] = []\n",
    "        self.camera1[\"specHfovDeg\"] = []\n",
    "        self.camera1[\"width\"] = []\n",
    "\n",
    "        # camera 2 specifications\n",
    "        self.camera2[\"distortionCoeff\"] = []\n",
    "        self.camera2[\"rotationMatrix\"] = dict()\n",
    "        self.camera2[\"rotationMatrix\"][\"r\"] = []\n",
    "        self.camera2[\"rotationMatrix\"][\"p\"] = []\n",
    "        self.camera2[\"rotationMatrix\"][\"y\"] = []\n",
    "        self.camera2[\"specTranslation\"] = dict()\n",
    "        self.camera2[\"specTranslation\"][\"x\"] = []\n",
    "        self.camera2[\"specTranslation\"][\"y\"] = []\n",
    "        self.camera2[\"specTranslation\"][\"z\"] = []\n",
    "        self.camera2[\"translation\"] = dict()\n",
    "        self.camera2[\"translation\"][\"x\"] = []\n",
    "        self.camera2[\"translation\"][\"y\"] = []\n",
    "        self.camera2[\"translation\"][\"z\"] = []\n",
    "        self.camera2[\"height\"] = []\n",
    "        self.camera2[\"intrinsicMatrix\"] = dict()\n",
    "        self.camera2[\"intrinsicMatrix\"][\"f_x\"] = []\n",
    "        self.camera2[\"intrinsicMatrix\"][\"f_y\"] = []\n",
    "        self.camera2[\"intrinsicMatrix\"][\"c_x\"] = []\n",
    "        self.camera2[\"intrinsicMatrix\"][\"c_y\"] = []\n",
    "        self.camera2[\"specHfovDeg\"] = []\n",
    "        self.camera2[\"width\"] = []\n",
    "\n",
    "        # imu data\n",
    "        self.imuRotationMatrix = dict()\n",
    "        self.imuRotationMatrix[\"r\"] = []\n",
    "        self.imuRotationMatrix[\"p\"] = []\n",
    "        self.imuRotationMatrix[\"y\"] = []\n",
    "        self.imuSpecTranslation = dict()\n",
    "        self.imuSpecTranslation[\"x\"] = []\n",
    "        self.imuSpecTranslation[\"y\"] = []\n",
    "        self.imuSpecTranslation[\"z\"] = []\n",
    "        self.imuTranslation = dict()\n",
    "        self.imuTranslation[\"x\"] = []\n",
    "        self.imuTranslation[\"y\"] = []\n",
    "        self.imuTranslation[\"z\"] = []\n",
    "\n",
    "        # rectified data\n",
    "        self.rectifiedRotationLeft = dict()\n",
    "        self.rectifiedRotationLeft[\"x\"] = []\n",
    "        self.rectifiedRotationLeft[\"y\"] = []\n",
    "        self.rectifiedRotationLeft[\"z\"] = []\n",
    "        self.rectifiedRotationRight = dict()\n",
    "        self.rectifiedRotationRight[\"x\"] = []\n",
    "        self.rectifiedRotationRight[\"y\"] = []\n",
    "        self.rectifiedRotationRight[\"z\"] = []\n",
    "\n",
    "        # miscellaneous data\n",
    "        self.miscellaneousData = []\n",
    "\n",
    "    def inputData(self, cameraData, imuData, miscellaneousData, rectificationData):\n",
    "        # because data in json files is not always in same order, we sort data before storing it\n",
    "        if cameraData[0][0] == 0:\n",
    "            # camera 0\n",
    "            self.camera0Save(cameraData[0][1])\n",
    "\n",
    "        elif cameraData[0][0] == 1:\n",
    "            # camera 1\n",
    "            self.camera1Save(cameraData[0][1])\n",
    "\n",
    "        else:\n",
    "            # camera 2\n",
    "            self.camera2Save(cameraData[0][1])\n",
    "        if len(cameraData) > 1:\n",
    "            if cameraData[1][0] == 0:\n",
    "                # camera 0\n",
    "                self.camera0Save(cameraData[1][1])\n",
    "\n",
    "            elif cameraData[1][0] == 1:\n",
    "                # camera 1\n",
    "                self.camera1Save(cameraData[1][1])\n",
    "\n",
    "            else:\n",
    "                # camera 2\n",
    "                self.camera2Save(cameraData[1][1])\n",
    "\n",
    "            if cameraData[2][0] == 0:\n",
    "                # camera 0\n",
    "                self.camera1Save(cameraData[2][1])\n",
    "\n",
    "            elif cameraData[2][0] == 1:\n",
    "                # camera 1\n",
    "                self.camera1Save(cameraData[2][1])\n",
    "\n",
    "            else:\n",
    "                # camera 2\n",
    "                self.camera2Save(cameraData[2][1])\n",
    "\n",
    "        # imu data\n",
    "        if imuData[\"rotationMatrix\"]:\n",
    "            tmp = matrixToEuler(imuData[\"rotationMatrix\"])\n",
    "            self.imuRotationMatrix[\"r\"].append(tmp[0])\n",
    "            self.imuRotationMatrix[\"p\"].append(tmp[1])\n",
    "            self.imuRotationMatrix[\"y\"].append(tmp[2])\n",
    "        self.imuSpecTranslation[\"x\"].append(imuData[\"specTranslation\"][\"x\"])\n",
    "        self.imuSpecTranslation[\"y\"].append(imuData[\"specTranslation\"][\"y\"])\n",
    "        self.imuSpecTranslation[\"z\"].append(imuData[\"specTranslation\"][\"z\"])\n",
    "        self.imuTranslation[\"x\"].append(imuData[\"translation\"][\"x\"])\n",
    "        self.imuTranslation[\"y\"].append(imuData[\"translation\"][\"y\"])\n",
    "        self.imuTranslation[\"z\"].append(imuData[\"translation\"][\"z\"])\n",
    "\n",
    "        # miscellaneous data\n",
    "        if miscellaneousData:\n",
    "            self.miscellaneousData.append(miscellaneousData)\n",
    "\n",
    "        # rectification data\n",
    "        if rectificationData[\"rectifiedRotationLeft\"]:\n",
    "            tmp = matrixToEuler(rectificationData[\"rectifiedRotationLeft\"])\n",
    "            self.rectifiedRotationLeft[\"x\"].append(tmp[0])\n",
    "            self.rectifiedRotationLeft[\"y\"].append(tmp[1])\n",
    "            self.rectifiedRotationLeft[\"z\"].append(tmp[2])\n",
    "        if rectificationData[\"rectifiedRotationRight\"]:\n",
    "            tmp = matrixToEuler(rectificationData[\"rectifiedRotationRight\"])\n",
    "            self.rectifiedRotationRight[\"x\"].append(tmp[0])\n",
    "            self.rectifiedRotationRight[\"y\"].append(tmp[1])\n",
    "            self.rectifiedRotationRight[\"z\"].append(tmp[2])\n",
    "\n",
    "    def camera0Save(self, data):\n",
    "        self.camera0[\"distortionCoeff\"].append(data[\"distortionCoeff\"])\n",
    "\n",
    "        # camera 0 does not have rotation matrix?\n",
    "        # tmp = matrixToEuler(data[\"extrinsics\"][\"rotationMatrix\"])\n",
    "        # self.camera0[\"rotationMatrix\"][\"r\"].append(tmp[0])\n",
    "        # self.camera0[\"rotationMatrix\"][\"p\"].append(tmp[1])\n",
    "        # self.camera0[\"rotationMatrix\"][\"y\"].append(tmp[2])\n",
    "\n",
    "        # save each spec translation component\n",
    "        self.camera0[\"specTranslation\"][\"x\"].append(data[\"extrinsics\"][\"specTranslation\"][\"x\"])\n",
    "        self.camera0[\"specTranslation\"][\"y\"].append(data[\"extrinsics\"][\"specTranslation\"][\"y\"])\n",
    "        self.camera0[\"specTranslation\"][\"z\"].append(data[\"extrinsics\"][\"specTranslation\"][\"z\"])\n",
    "\n",
    "        # save each translation component\n",
    "        self.camera0[\"translation\"][\"x\"].append(data[\"extrinsics\"][\"translation\"][\"x\"])\n",
    "        self.camera0[\"translation\"][\"y\"].append(data[\"extrinsics\"][\"translation\"][\"y\"])\n",
    "        self.camera0[\"translation\"][\"z\"].append(data[\"extrinsics\"][\"translation\"][\"z\"])\n",
    "        self.camera0[\"height\"].append(data[\"height\"])\n",
    "\n",
    "        # save each intrinsic matrix component\n",
    "        tmp = intrinsicData(data[\"intrinsicMatrix\"])\n",
    "        self.camera0[\"intrinsicMatrix\"][\"f_x\"].append(tmp[0])\n",
    "        self.camera0[\"intrinsicMatrix\"][\"f_y\"].append(tmp[2])\n",
    "        self.camera0[\"intrinsicMatrix\"][\"c_x\"].append(tmp[1])\n",
    "        self.camera0[\"intrinsicMatrix\"][\"c_y\"].append(tmp[3])\n",
    "        self.camera0[\"specHfovDeg\"].append(data[\"specHfovDeg\"])\n",
    "        self.camera0[\"width\"].append(data[\"width\"])\n",
    "\n",
    "    def camera1Save(self, data):\n",
    "        self.camera1[\"distortionCoeff\"].append(data[\"distortionCoeff\"])\n",
    "\n",
    "        # save each rotation matrix component\n",
    "        tmp = matrixToEuler(data[\"extrinsics\"][\"rotationMatrix\"])\n",
    "        self.camera1[\"rotationMatrix\"][\"r\"].append(tmp[0])\n",
    "        self.camera1[\"rotationMatrix\"][\"p\"].append(tmp[1])\n",
    "        self.camera1[\"rotationMatrix\"][\"y\"].append(tmp[2])\n",
    "\n",
    "        # save each spec translation component\n",
    "        self.camera1[\"specTranslation\"][\"x\"].append(data[\"extrinsics\"][\"specTranslation\"][\"x\"])\n",
    "        self.camera1[\"specTranslation\"][\"y\"].append(data[\"extrinsics\"][\"specTranslation\"][\"y\"])\n",
    "        self.camera1[\"specTranslation\"][\"z\"].append(data[\"extrinsics\"][\"specTranslation\"][\"z\"])\n",
    "\n",
    "        # save each translation component\n",
    "        self.camera1[\"translation\"][\"x\"].append(data[\"extrinsics\"][\"translation\"][\"x\"])\n",
    "        self.camera1[\"translation\"][\"y\"].append(data[\"extrinsics\"][\"translation\"][\"y\"])\n",
    "        self.camera1[\"translation\"][\"z\"].append(data[\"extrinsics\"][\"translation\"][\"z\"])\n",
    "        self.camera1[\"height\"].append(data[\"height\"])\n",
    "\n",
    "        # save each intrinsic matrix component\n",
    "        tmp = intrinsicData(data[\"intrinsicMatrix\"])\n",
    "        self.camera1[\"intrinsicMatrix\"][\"f_x\"].append(tmp[0])\n",
    "        self.camera1[\"intrinsicMatrix\"][\"f_y\"].append(tmp[2])\n",
    "        self.camera1[\"intrinsicMatrix\"][\"c_x\"].append(tmp[1])\n",
    "        self.camera1[\"intrinsicMatrix\"][\"c_y\"].append(tmp[3])\n",
    "        self.camera1[\"specHfovDeg\"].append(data[\"specHfovDeg\"])\n",
    "        self.camera1[\"width\"].append(data[\"width\"])\n",
    "\n",
    "    def camera2Save(self, data):\n",
    "        self.camera2[\"distortionCoeff\"].append(data[\"distortionCoeff\"])\n",
    "\n",
    "        # save each rotation matrix component\n",
    "        tmp = matrixToEuler(data[\"extrinsics\"][\"rotationMatrix\"])\n",
    "        self.camera2[\"rotationMatrix\"][\"r\"].append(tmp[0])\n",
    "        self.camera2[\"rotationMatrix\"][\"p\"].append(tmp[1])\n",
    "        self.camera2[\"rotationMatrix\"][\"y\"].append(tmp[2])\n",
    "\n",
    "        # save each spec translation component\n",
    "        self.camera2[\"specTranslation\"][\"x\"].append(data[\"extrinsics\"][\"specTranslation\"][\"x\"])\n",
    "        self.camera2[\"specTranslation\"][\"y\"].append(data[\"extrinsics\"][\"specTranslation\"][\"y\"])\n",
    "        self.camera2[\"specTranslation\"][\"z\"].append(data[\"extrinsics\"][\"specTranslation\"][\"z\"])\n",
    "\n",
    "        # save each translation component\n",
    "        self.camera2[\"translation\"][\"x\"].append(data[\"extrinsics\"][\"translation\"][\"x\"])\n",
    "        self.camera2[\"translation\"][\"y\"].append(data[\"extrinsics\"][\"translation\"][\"y\"])\n",
    "        self.camera2[\"translation\"][\"z\"].append(data[\"extrinsics\"][\"translation\"][\"z\"])\n",
    "        self.camera2[\"height\"].append(data[\"height\"])\n",
    "\n",
    "        # save each intrinsic matrix component\n",
    "        tmp = intrinsicData(data[\"intrinsicMatrix\"])\n",
    "        self.camera2[\"intrinsicMatrix\"][\"f_x\"].append(tmp[0])\n",
    "        self.camera2[\"intrinsicMatrix\"][\"f_y\"].append(tmp[2])\n",
    "        self.camera2[\"intrinsicMatrix\"][\"c_x\"].append(tmp[1])\n",
    "        self.camera2[\"intrinsicMatrix\"][\"c_y\"].append(tmp[3])\n",
    "        self.camera2[\"specHfovDeg\"].append(data[\"specHfovDeg\"])\n",
    "        self.camera2[\"width\"].append(data[\"width\"])\n",
    "\n",
    "    def plotHistogram(self, plotName):\n",
    "        # camera 0 data is shown separately\n",
    "        if plotName == \"camera0-Rotation\":\n",
    "            n, bins, patches = plt.hist(\n",
    "                [self.camera0[\"rotationMatrix\"][\"r\"],\n",
    "                 self.camera0[\"rotationMatrix\"][\"p\"],\n",
    "                 self.camera0[\"rotationMatrix\"][\"y\"]],\n",
    "                label=['R', 'P', 'Y']\n",
    "                )\n",
    "            plt.title(\"Camera0-Rotation\")\n",
    "\n",
    "        if plotName == \"camera0-SpecTranslation\":\n",
    "            n, bins, patches = plt.hist(\n",
    "                [self.camera0[\"specTranslation\"][\"x\"],\n",
    "                 self.camera0[\"specTranslation\"][\"y\"],\n",
    "                 self.camera0[\"specTranslation\"][\"z\"]],\n",
    "                label=['X', 'Y', 'Z']\n",
    "            )\n",
    "            plt.title(\"Camera0-SpecTranslation\")\n",
    "\n",
    "        if plotName == \"camera0-Translation\":\n",
    "            n, bins, patches = plt.hist(\n",
    "                [self.camera0[\"translation\"][\"x\"],\n",
    "                 self.camera0[\"translation\"][\"y\"],\n",
    "                 self.camera0[\"translation\"][\"z\"]],\n",
    "                label=['X', 'Y', 'Z']\n",
    "            )\n",
    "            plt.title(\"Camera0-Translation\")\n",
    "\n",
    "        if plotName == \"camera0-WidthHeight\":\n",
    "            n, bins, patches = plt.hist(\n",
    "                [self.camera0[\"width\"],\n",
    "                 self.camera0[\"height\"]],\n",
    "                label=['Width', 'Height']\n",
    "            )\n",
    "            plt.title(\"Camera0-WidthHeight\")\n",
    "\n",
    "        if plotName == \"camera0-IntrinsicMatrix\":\n",
    "            n, bins, patches = plt.hist(\n",
    "                [self.camera0[\"intrinsicMatrix\"][\"f_x\"],\n",
    "                 self.camera0[\"intrinsicMatrix\"][\"f_y\"],\n",
    "                 self.camera0[\"intrinsicMatrix\"][\"c_x\"],\n",
    "                 self.camera0[\"intrinsicMatrix\"][\"c_y\"]],\n",
    "                label=['F_X', 'F_Y', 'C_X', 'C_Y']\n",
    "            )\n",
    "            plt.title(\"Camera0-IntrinsicMatrix\")\n",
    "\n",
    "        if plotName == \"camera0-SpecHfovDeg\":\n",
    "            n, bins, patches = plt.hist(\n",
    "                self.camera0[\"specHfovDeg\"],\n",
    "                label='SpecHFovDeg'\n",
    "            )\n",
    "            plt.title(\"Camera0-SpecHfovDeg\")\n",
    "\n",
    "        # camera 1 and camera 2 data will be shown together\n",
    "        if plotName == \"camera12-Rotation\":\n",
    "            n, bins, patches = plt.hist(\n",
    "                [self.camera1[\"rotationMatrix\"][\"r\"],\n",
    "                 self.camera2[\"rotationMatrix\"][\"r\"],\n",
    "                 self.camera1[\"rotationMatrix\"][\"p\"],\n",
    "                 self.camera2[\"rotationMatrix\"][\"p\"],\n",
    "                 self.camera1[\"rotationMatrix\"][\"y\"],\n",
    "                 self.camera2[\"rotationMatrix\"][\"y\"]],\n",
    "                label=['R1', 'R2', 'P1', 'P2', 'Y1', 'Y2']\n",
    "                )\n",
    "            plt.title(\"Camera12-Rotation\")\n",
    "        if plotName == \"camera12-SpecTranslation\":\n",
    "            n, bins, patches = plt.hist(\n",
    "                [self.camera1[\"specTranslation\"][\"x\"],\n",
    "                 self.camera2[\"specTranslation\"][\"x\"],\n",
    "                 self.camera1[\"specTranslation\"][\"y\"],\n",
    "                 self.camera2[\"specTranslation\"][\"y\"],\n",
    "                 self.camera1[\"specTranslation\"][\"z\"],\n",
    "                 self.camera2[\"specTranslation\"][\"z\"]],\n",
    "                label=['X1', 'X2', 'Y1', 'Y2', 'Z1', 'Z2']\n",
    "            )\n",
    "            plt.title(\"Camera12-SpecTranslation\")\n",
    "\n",
    "        if plotName == \"camera12-Translation\":\n",
    "            n, bins, patches = plt.hist(\n",
    "                [self.camera1[\"translation\"][\"x\"],\n",
    "                 self.camera2[\"translation\"][\"x\"],\n",
    "                 self.camera1[\"translation\"][\"y\"],\n",
    "                 self.camera2[\"translation\"][\"y\"],\n",
    "                 self.camera1[\"translation\"][\"z\"],\n",
    "                 self.camera2[\"translation\"][\"z\"]],\n",
    "                label=['X1', 'X2', 'Y1', 'Y2', 'Z1', 'Z2']\n",
    "            )\n",
    "            plt.title(\"Camera12-Translation\")\n",
    "\n",
    "        if plotName == \"camera12-WidthHeight\":\n",
    "            n, bins, patches = plt.hist(\n",
    "                [self.camera1[\"width\"],\n",
    "                 self.camera2[\"width\"],\n",
    "                 self.camera1[\"height\"],\n",
    "                 self.camera2[\"height\"]],\n",
    "                label=['Width1', 'Width2', 'Height1', 'Height2']\n",
    "            )\n",
    "            plt.title(\"Camera12-WidthHeight\")\n",
    "\n",
    "        if plotName == \"camera12-IntrinsicMatrix\":\n",
    "            n, bins, patches = plt.hist(\n",
    "                [self.camera1[\"intrinsicMatrix\"][\"f_x\"],\n",
    "                 self.camera2[\"intrinsicMatrix\"][\"f_x\"],\n",
    "                 self.camera1[\"intrinsicMatrix\"][\"f_y\"],\n",
    "                 self.camera2[\"intrinsicMatrix\"][\"f_y\"],\n",
    "                 self.camera1[\"intrinsicMatrix\"][\"c_x\"],\n",
    "                 self.camera2[\"intrinsicMatrix\"][\"c_x\"],\n",
    "                 self.camera1[\"intrinsicMatrix\"][\"c_y\"],\n",
    "                 self.camera2[\"intrinsicMatrix\"][\"c_y\"]],\n",
    "                label=['F_X1', 'F_X2', 'F_Y1', 'F_Y2', 'C_X1', 'C_X2', 'C_Y1', 'C_Y2']\n",
    "            )\n",
    "            plt.title(\"Camera12-IntrinsicMatrix\")\n",
    "\n",
    "        if plotName == \"camera12-SpecHfovDeg\":\n",
    "            n, bins, patches = plt.hist(\n",
    "                [self.camera1[\"specHfovDeg\"],\n",
    "                 self.camera2[\"specHfovDeg\"]],\n",
    "                label=['SpecHfovDeg1', 'SpecHfovDeg2']\n",
    "            )\n",
    "            plt.title(\"Camera12-SpecHfovDeg\")\n",
    "\n",
    "        if plotName[:7] == \"camera0\":\n",
    "            cm = plt.cm.tab10\n",
    "        else:\n",
    "            cm = plt.cm.tab20\n",
    "        for i, p in enumerate(patches):\n",
    "            plt.setp(p, 'facecolor', cm(i))\n",
    "        plt.legend()\n",
    "        plt.xlabel(\"Values\")\n",
    "        plt.ylabel(\"Number occurrences\")\n",
    "        plt.show()\n",
    "\n",
    "\n",
    "# create dictionary for every camera type\n",
    "filesDic = dict()\n",
    "\n",
    "# provide path to folder with .json calibration files\n",
    "path = os.getcwd() + \"/calib_files\"\n",
    "for filename in os.listdir(path):\n",
    "    with open(os.path.join(path, filename), 'r') as f:\n",
    "        data = json.load(f)\n",
    "        if data[\"boardName\"] not in filesDic:\n",
    "            # if camera type is not yet declared initialize it\n",
    "            filesDic[data[\"boardName\"]] = PoeData(data[\"boardName\"])\n",
    "\n",
    "        # send in data\n",
    "        filesDic[data[\"boardName\"]].inputData(\n",
    "            data[\"cameraData\"],\n",
    "            data[\"imuExtrinsics\"],\n",
    "            data[\"miscellaneousData\"],\n",
    "            data[\"stereoRectificationData\"]\n",
    "        )\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Camera types:\n",
    "# - BW1098OBC\n",
    "# - OAK-D\n",
    "# - OAK-D-IoT-40\n",
    "# - BW1092\n",
    "# - OAK-1-POE\n",
    "# - BW1093OAK\n",
    "# - OAK-1\n",
    "# - OAK-D-LITE\n",
    "# - OAK-D-POE\n",
    "# - OAK-D-PRO\n",
    "# - OAK-D-S2\n",
    "# to plot histograms you will have to specify which device's data you wish to see and which data you wish to plot\n",
    "# Plotting options are:\n",
    "# camera0-SpecTranslation\n",
    "# camera0-Translation\n",
    "# camera0-WidthHeight\n",
    "# camera0-IntrinsicMatrix\n",
    "# camera0-SpecHfovDeg\n",
    "# camera12-Rotation\n",
    "# camera12-SpecTranslation\n",
    "# camera12-Translation\n",
    "# camera12-WidthHeight\n",
    "# camera12-IntrinsicMatrix\n",
    "# camera12-SpecHfovDeg\n",
    "# MORE plotts can be added...\n",
    "filesDic[\"OAK-D\"].plotHistogram(\"camera12-Rotation\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "filesDic[\"OAK-D\"].plotHistogram(\"camera0-SpecTranslation\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "filesDic[\"OAK-D\"].plotHistogram(\"camera12-pecTranslation\")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
